(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('yly-form-source/lib/yly-form-controller'), require('yly-form-source/lib/yly-form-custom-script'), require('@/utils/lang'), require('@/utils/validator')) :
  typeof define === 'function' && define.amd ? define(['exports', 'yly-form-source/lib/yly-form-controller', 'yly-form-source/lib/yly-form-custom-script', '@/utils/lang', '@/utils/validator'], factory) :
  (global = global || self, factory(global['form-source'] = {}, global.ylyFormController, global.ylyFormCustomScript, global.lang, global.validator));
}(this, (function (exports, ylyFormController, ylyFormCustomScript, lang, validator) { 'use strict';

  function _defineProperty(e, r, t) {
    return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
      value: t,
      enumerable: !0,
      configurable: !0,
      writable: !0
    }) : e[r] = t, e;
  }
  function _toPrimitive(t, r) {
    if ("object" != typeof t || !t) return t;
    var e = t[Symbol.toPrimitive];
    if (void 0 !== e) {
      var i = e.call(t, r || "default");
      if ("object" != typeof i) return i;
      throw new TypeError("@@toPrimitive must return a primitive value.");
    }
    return ("string" === r ? String : Number)(t);
  }
  function _toPropertyKey(t) {
    var i = _toPrimitive(t, "string");
    return "symbol" == typeof i ? i : i + "";
  }

  class FormSource {
    // 表单组件控制器
    // static globalFormDataControl = new FormDataControl()
    // // 表单组件配置控制器
    // static globalFormComponentsControl = new FormComponentsControl()
    // static globalCustomScript = new CustomScript()
    constructor() {
      this.sourceContent = {
        config: {},
        instance: {
          // 存放表单的重要标识
          formId: '',
          projectId: '',
          dbId: ''
        },
        renderScene: '',
        renderClient: 'WEB'
      };
      this.selectedComponent = {}; // 当前选中的组件
      this.formRef = null; // 表单ref
    }
    static getInstance(sourceId, formId, formCode, vm) {
      // 生成表单处理源
      let formSource = FormSource.globalFormMap.get(sourceId);
      if (!formSource) {
        formSource = new FormSource(vm);
        FormSource.globalFormMap.set(sourceId, formSource);
        formSource.formDataControl = new ylyFormController.FormDataControl(formSource);
        formSource.formComponentsControl = new ylyFormController.FormComponentsControl(formSource);
        formSource.customScript = new ylyFormCustomScript.CustomScript(formSource);
        formSource.pageTemplateController = new ylyFormController.PageTemplateController(formSource);
      }
      return formSource;
    }
    static deleteInstance(sourceId) {
      FormSource.globalFormMap.delete(sourceId);
    }
    initSourceContent(sourceContent) {
      this.sourceContent = sourceContent;
    }
    updateSourceContent(sourceContent) {
      Object.assign(this.sourceContent, sourceContent);
    }
    getSelectedComponent() {
      return this.selectedComponent;
    }
    updateSelectedComponent(component) {
      if (component) {
        this.selectedComponent = component;
        // TODO: 这里存在问题， 会把不必要的editor配置进行存储， 需要得时候可以动态获取
        this.selectedComponent.editorConfig = this.formComponentsControl.getEditorConfigByCompCode(this.selectedComponent.code);
      } else {
        this.selectedComponent = {};
      }
    }
    initFormRef(formRef) {
      this.formRef = formRef;
    }
  }
  _defineProperty(FormSource, "globalFormMap", new Map());
  FormSource.FormDataControl = ylyFormController.FormDataControl;
  FormSource.FormComponentsControl = ylyFormController.FormComponentsControl;
  FormSource.CustomScript = ylyFormCustomScript.CustomScript;
  FormSource.PageTemplateController = ylyFormController.PageTemplateController;

  var FormInputConfig = {
    version: 'v2.0',
    code: 'FORM_INPUT',
    type: 'input',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormTextInput',
      edit: 'FormTextInput',
      read: 'FormTextInput'
    },
    desc: {
      icon: 'icon-write',
      type: 'input'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('输入框'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%',
      // 宽度
      placeholder: '请输入',
      // 没有输入时，提示文字
      clearable: false,
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      afterSaveResetStatus: false,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      maxLength: null,
      promptMessageContent: '',
      isCc: false // 是否抄送字段
    },
    default: {
      defaultValue: '',
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'INPUT_TYPE', 'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_DEFAULT_VALUE', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      'INPUT_TYPE', 'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_DEFAULT_VALUE', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    methods: {}
  };

  var FormTextareaConfig = {
    version: 'v2.0',
    code: 'FORM_TEXTAREA',
    type: 'textarea',
    // 原来的表单类型
    key: '',
    renderComponent: {
      ide: 'FormTextareaInput',
      edit: 'FormTextareaInput',
      read: 'FormTextareaInput'
    },
    desc: {
      icon: 'icon-edit',
      type: 'textarea'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('文本框'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-edit',
      width: '100%',
      // 宽度
      minRows: 4,
      maxRows: 6,
      placeholder: '请输入',
      // 没有输入时，提示文字
      clearable: false,
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      afterSaveResetStatus: false,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      maxLength: 2000,
      promptMessageContent: '',
      isCc: false // 是否抄送字段
    },
    default: {
      defaultValue: '',
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'TEXTAREA_HEIGHT', 'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_DEFAULT_VALUE', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      'TEXTAREA_HEIGHT', 'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_DEFAULT_VALUE', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    }
  };

  var FormNumberInputConfig = {
    version: 'v2.0',
    code: 'FORM_NUMBER_INPUT',
    type: 'number',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormNumberInput',
      edit: 'FormNumberInput',
      read: 'FormNumberInput'
    },
    desc: {
      icon: 'icon-number',
      type: 'number'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('数字输入框'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-number',
      // OPTIONS 属性
      width: '100%',
      // 宽度
      minValue: null,
      // 可输入最小值
      maxValue: null,
      // 可输入最大值
      precision: null,
      step: 1,
      // 步长，点击加减按钮时候，加减多少
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false,
      // 是否禁用
      placeholder: lang.lang('请输入'),
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: undefined,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'STEP_SIZE', 'NUMBER_MIN', 'NUMBER_MAX', 'NUMBER_PRECISION', 'COMPONENT_DEFAULT_VALUE', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      'PLACEHOLDER',
      // 'COMPONENT_WIDTH',
      'NUMBER_MIN', 'NUMBER_MAX',
      // 'NUMBER_PRECISION',
      'COMPONENT_DEFAULT_VALUE',
      // 'COMPONENT_SAVE_RESET',
      'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE'
      // 'CUSTOM_EVENT'
      ]
    }
  };

  var FormSelectInputConfig = {
    version: 'v2.0',
    code: 'FORM_SELECT_INPUT',
    type: 'select',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormSelectInput',
      edit: 'FormSelectInput',
      read: 'FormSelectInput'
    },
    desc: {
      icon: 'icon-xiala',
      type: 'select'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('下拉选择器'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-xiala',
      // OPTIONS 属性
      width: '100%',
      // 宽度
      multiple: false,
      // 是否允许多选
      disabled: false,
      // 是否禁用
      clearable: false,
      // 是否显示清除按钮
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      placeholder: lang.lang('请选择'),
      // 默认提示文字
      dynamic: 'static',
      // 选项配置类型
      dynamicKey: '',
      // 数据字典code
      options: [
      // 静态数据
      // 下拉选择项配置
      {
        value: '1',
        label: lang.lang('下拉框1')
      }, {
        value: '2',
        label: lang.lang('下拉框2')
      }],
      distal: {
        // 远端数据配置
        dictType: 'static',
        dictCode: undefined,
        dictCondition: undefined,
        dictTable: undefined,
        dictField: undefined,
        dictText: undefined
      },
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      showSearch: false,
      // 是否显示搜索框，搜索选择的项的值，而不是文字
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: undefined,
      // 下拉选框请使用undefined为默认值
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'IS_USER_ATTR', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      'PLACEHOLDER',
      // 'COMPONENT_WIDTH',
      'SELECT_OPTIONS_CONFIG', 'IS_USER_ATTR',
      // 'COMPONENT_SAVE_RESET',
      // 'PROMPT_MESSAGE',
      'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    }
  };

  var FormCheckBoxConfig = {
    version: 'v2.0',
    code: 'FORM_CHECK_BOX',
    type: 'checkbox',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormCheckBox',
      edit: 'FormCheckBox',
      read: 'FormCheckBox'
    },
    desc: {
      icon: 'icon-duoxuan1',
      type: 'select'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('多选框'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-duoxuan1',
      // OPTIONS 属性
      disabled: false,
      // 是否禁用
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      dynamicKey: '',
      dynamic: 'static',
      options: [{
        value: '1',
        label: lang.lang('选项1')
      }, {
        value: '2',
        label: lang.lang('选项2')
      }, {
        value: '3',
        label: lang.lang('选项3')
      }],
      distal: {
        // 远端数据配置
        dictType: 'static',
        dictCode: undefined,
        // 字典code
        dictCondition: undefined,
        // 过滤信息
        dictTable: undefined,
        // 表字段名称
        tableId: undefined,
        // 表id
        dictField: undefined,
        // 列字段名称
        columnId: undefined,
        // 列id
        dictText: undefined //
      },
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: [],
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      // 'PLACEHOLDER',
      'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG',
      // 'COMPONENT_SAVE_RESET',
      // 'PROMPT_MESSAGE',
      'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE'
      // 'CUSTOM_EVENT'
      ]
    }
  };

  var FormRadioBoxConfig = {
    version: 'v2.0',
    code: 'FORM_RADIO_BOX',
    type: 'radio',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormRadioBox',
      edit: 'FormRadioBox',
      read: 'FormRadioBox'
    },
    desc: {
      icon: 'icon-danxuan-cuxiantiao'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('单选框'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-danxuan-cuxiantiao',
      // OPTIONS 属性
      disabled: false,
      // 是否禁用
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      dynamicKey: '',
      dynamic: 'static',
      options: [{
        value: '1',
        label: lang.lang('选项1')
      }, {
        value: '2',
        label: lang.lang('选项2')
      }, {
        value: '3',
        label: lang.lang('选项3')
      }],
      distal: {
        // 远端数据配置
        dictType: 'static',
        dictCode: undefined,
        dictCondition: undefined,
        dictTable: undefined,
        dictField: undefined,
        dictText: undefined
      },
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: undefined,
      // 下拉选框请使用undefined为默认值
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormDateSelectConfig = {
    version: 'v2.0',
    code: 'FORM_DATE_SELECT',
    type: 'date',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormDateSelect',
      edit: 'FormDateSelect',
      read: 'FormDateSelect'
    },
    desc: {
      icon: 'icon-danxuan-cuxiantiao'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('日期选择框'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-danxuan-cuxiantiao',
      // OPTIONS 属性
      width: '100%',
      // 宽度
      range: false,
      // 范围日期选择，为true则会显示两个时间选择框（同时defaultValue和placeholder要改成数组），
      showTime: false,
      // 是否显示时间选择器
      disabled: false,
      // 是否禁用
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      clearable: false,
      // 是否显示清除按钮
      placeholder: lang.lang('请选择'),
      rangePlaceholder: [lang.lang('开始时间'), lang.lang('结束时间')],
      format: 'YYYY-MM-DD',
      // 展示格式  （请按照这个规则写 YYYY-MM-DD HH:mm:ss，区分大小写）
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: '',
      // 默认值，字符串 12:00:00
      rangeDefaultValue: [],
      // 默认值，字符串 12:00:00
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'DATE_FORMAT', 'COMPONENT_WIDTH', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'DATE_FORMAT', 'COMPONENT_WIDTH', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormSwitchInputConfig = {
    version: 'v2.0',
    code: 'FORM_SWITCH_INPUT',
    type: 'switch',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormSwitchInput',
      edit: 'FormSwitchInput',
      read: 'FormSwitchInput'
    },
    desc: {
      icon: 'icon-kaiguan3',
      type: 'switch'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('开关'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-kaiguan3',
      // OPTIONS 属性
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false,
      // 是否禁用,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: false,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'CUSTOM_EVENT'
      // 'COMPONENT_RULE'
      ]
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'CUSTOM_EVENT'
      // 'COMPONENT_RULE'
      ]
    }
  };

  var FormButtonConfig = {
    version: 'v2.0',
    code: 'FORM_BUTTON',
    type: 'button',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormButton',
      edit: 'FormButton',
      read: 'FormButton'
    },
    desc: {
      icon: 'icon-button-remove',
      type: 'button'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('按钮'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-button-remove',
      // OPTIONS 属性
      type: 'primary',
      handle: 'submit',
      dynamicFun: '',
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false // 是否禁用，false不禁用，true禁用
    },
    default: {
      defaultValue: false,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      // tableConfig: [
      //   'TableInfoEditor'
      // ],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR'
      // 'COMPONENT_RULE'
      ]
    },
    mobileEditor: {
      elementConfig: ['LABEL_INFO',
      //label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR']
    }
  };

  var FormStaticTextConfig = {
    version: 'v2.0',
    code: 'FORM_STATIC_TEXT',
    type: 'static-text',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormStaticText',
      edit: 'FormStaticText',
      read: 'FormStaticText'
    },
    desc: {
      icon: 'icon-zihao',
      type: 'static-text'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('文字'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-zihao',
      // OPTIONS 属性
      textAlign: 'left',
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      showRequiredMark: false,
      paddingLeft: '0%',
      promptMessageContent: '',
      countStatistics: {
        status: false,
        countNum: 0
      }
    },
    default: {
      defaultValue: 0,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      elementConfig: ['LABEL_INFO',
      //label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'TEXT_ALIGN', 'COUNT_STATISTICS', 'TEXT_PADDING_LEFT', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['LABEL_INFO',
      //label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'TEXT_ALIGN', 'COUNT_STATISTICS', 'TEXT_PADDING_LEFT', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormPhoneInputConfig = {
    version: 'v2.0',
    code: 'FORM_PHONE_INPUT',
    type: 'KPhoneInput',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormPhoneInput',
      edit: 'FormPhoneInput',
      read: 'FormPhoneInput'
    },
    desc: {
      icon: 'icon-write'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('电话号码'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: "100%",
      // 宽度
      defaultValue: "",
      // 默认值
      placeholder: lang.lang('电话号码'),
      // 没有输入时，提示文字
      clearable: false,
      isCc: false,
      maxLength: null,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: '',
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH',
      // 'COMPONENT_DEFAULT_VALUE',
      'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE',
      // 'INPUT_OPTIONS_ATTR',
      'COMPONENT_RULE', 'CUSTOM_EVENT']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      // label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH',
      // 'COMPONENT_DEFAULT_VALUE',
      'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE',
      // 'INPUT_OPTIONS_ATTR',
      'COMPONENT_RULE', 'CUSTOM_EVENT']
    }
  };

  var FormCascadeSelectConfig = {
    version: 'v2.0',
    code: 'FORM_CASCADE_SELECT',
    type: 'cascader',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormCascadeSelect',
      edit: 'FormCascadeSelect',
      read: 'FormCascadeSelect'
    },
    desc: {
      icon: 'icon-guanlian'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('级联选择器'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-guanlian',
      disabled: false,
      // 是否禁用
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      showSearch: false,
      // 是否显示搜索框，搜索选择的项的值，而不是文字
      placeholder: '请选择',
      clearable: false,
      // 是否显示清除按钮
      dynamicKey: '',
      dynamic: 'static',
      options: [{
        value: '1',
        label: lang.lang('选项1'),
        children: [{
          value: '11',
          label: lang.lang('选项11')
        }]
      }, {
        value: '2',
        label: '选项2',
        children: [{
          value: '22',
          label: lang.lang('选项22')
        }]
      }],
      distal: {
        // 远端数据配置
        dictType: 'static',
        dictCode: undefined,
        dictCondition: undefined,
        dictTable: undefined,
        dictField: undefined,
        dictText: undefined
      },
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormTreeSelectConfig = {
    version: 'v2.0',
    code: 'FORM_TREE_SELECT',
    type: 'treeSelect',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormTreeSelect',
      edit: 'FormTreeSelect',
      read: 'FormTreeSelect'
    },
    desc: {
      icon: 'icon-tree'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('树选择器'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-tree',
      disabled: false,
      // 是否禁用
      defaultValue: undefined,
      // 默认值
      multiple: false,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      clearable: false,
      // 是否显示清除按钮
      showSearch: false,
      // 是否显示搜索框，搜索选择的项的值，而不是文字
      treeCheckable: false,
      placeholder: lang.lang('请选择'),
      dynamicKey: '',
      dynamic: 'static',
      options: [{
        value: '1',
        label: lang.lang('选项1'),
        children: [{
          value: '11',
          label: lang.lang('选项11')
        }]
      }, {
        value: '2',
        label: lang.lang('选项2'),
        children: [{
          value: '22',
          label: lang.lang('选项22')
        }]
      }],
      distal: {
        // 远端数据配置
        dictType: 'static',
        dictCode: undefined,
        dictCondition: undefined,
        dictTable: undefined,
        dictField: undefined,
        dictText: undefined
      },
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'SELECT_OPTIONS_CONFIG', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormAreaSelectConfig = {
    version: 'v2.0',
    code: 'FORM_AREA_SELECT',
    type: 'KDistpickerSelect',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'KDistpickerSelect',
      edit: 'KDistpickerSelect',
      read: 'KDistpickerSelect'
    },
    desc: {
      icon: 'icon-tree'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('地区地址'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-tree',
      width: "100%",
      // 宽度
      defaultValue: {
        province: '',
        city: '',
        area: ''
      },
      // 默认值
      placeholder: lang.lang('地区地址'),
      // 没有输入时，提示文字
      clearable: false,
      isCc: false,
      maxLength: null,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    bindDataInfo: {
      provinceKey: undefined,
      // 省key
      provinceName: undefined,
      // 省名称
      provinceId: undefined,
      cityKey: undefined,
      // 市key
      cityName: undefined,
      // 市名称
      cityId: undefined,
      areaKey: undefined,
      // 区key
      areaName: undefined,
      // 区名称
      areaId: undefined
    },
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      type: 'object',
      validator: validator.AreaAddressValidator
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormDividerBoxConfig = {
    version: 'v2.0',
    code: 'FORM_DIVIDER_BOX',
    type: 'divider',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormDividerBox',
      edit: 'FormDividerBox',
      read: 'FormDividerBox'
    },
    desc: {
      icon: 'icon-fengexian'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('分割线'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-fengexian',
      orientation: 'left'
    },
    editor: {
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PROMPT_MESSAGE', 'ORIENTATION']
    },
    mobileEditor: {
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PROMPT_MESSAGE', 'ORIENTATION']
    }
  };

  var FormCardConfig = {
    version: 'v2.0',
    code: 'FORM_CARD',
    type: 'card',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormCard',
      edit: 'FormCard',
      read: 'FormCard'
    },
    desc: {
      icon: 'icon-qiapian'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('卡片布局'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-fengexian',
      orientation: 'left'
    },
    list: [],
    children: [],
    default: {},
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      // 'PROMPT_MESSAGE',
      // 'COMPONENT_RULE'
      ]
    },
    mobileEditor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    }
  };

  var FormGridConfig = {
    version: 'v2.0',
    code: 'FORM_GRID',
    type: 'grid',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormGrid',
      edit: 'FormGrid',
      read: 'FormGrid'
    },
    desc: {
      icon: 'icon-zhage'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('栅格布局'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-zhage',
      gutter: 0
    },
    colNum: 2,
    columns: [{
      span: 12,
      list: []
    }, {
      span: 12,
      list: []
    }],
    default: {},
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['GRID_GUTTER',
      //label 标签
      'GRID_COLUMN']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'GRID_GUTTER',
      //label 标签
      'GRID_COLUMN']
    }
  };

  var FormMyFieldConfig = {
    version: 'v2.0',
    code: 'FORM_MY_FIELD',
    type: 'myField',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormMyField',
      edit: 'FormMyField',
      read: 'FormMyField'
    },
    desc: {
      icon: 'icon-qiapian'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('字段集'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-qiapian',
      gutter: 0
    },
    list: [],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: [
        // 'SYSTEM_DEFAULT_VALUE'
      ]
    },
    mobileEditor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: [
        // 'SYSTEM_DEFAULT_VALUE'
      ]
    }
  };

  var FormUserSelectConfig = {
    version: 'v2.0',
    code: 'FORM_USER_SELECT',
    type: 'YLYUserSearch',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'YlYUserSearch',
      edit: 'YlYUserSearch',
      read: 'YlYUserSearch'
    },
    desc: {
      icon: 'icon-tree'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('人员查询'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-tree',
      width: '100%',
      // 宽度
      placeholder: lang.lang('请输入'),
      // 没有输入时，提示文字
      clearable: false,
      isCc: false,
      maxLength: null,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: ''
    },
    initQueryUrl: '',
    queryUrl: '/onlcode/saas/user/autoCompleteUserInfo',
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'IS_USER_ATTR', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'IS_USER_ATTR', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'COMPONENT_RULE']
    }
  };

  var FormOrgSelectConfig = {
    version: 'v2.0',
    code: 'FORM_ORG_SELECT',
    type: 'YLYOrgSearch',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'YLYOrgSearch',
      edit: 'YLYOrgSearch',
      read: 'YLYOrgSearch'
    },
    desc: {
      icon: 'icon-folder'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('组织查询'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-folder',
      width: '100%',
      // 宽度
      placeholder: lang.lang('请输入'),
      // 没有输入时，提示文字
      clearable: false,
      isCc: false,
      maxLength: null,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: ''
    },
    initQueryUrl: '',
    queryUrl: '/onlcode/saas/org/autoCompleteOrgInfo',
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'COMPONENT_RULE']
    }
  };

  var FormDocumentNumberConfig = {
    version: 'v2.0',
    code: 'FORM_DOCUMENT_NUMBER',
    type: 'FORM_DOCUMENT_NUMBER',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormDocumentNumber',
      edit: 'FormDocumentNumber',
      read: 'FormDocumentNumber'
    },
    desc: {
      icon: 'icon-folder'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('单据号'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-folder',
      width: '100%',
      // 宽度
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      disabled: false // 是否禁用，false不禁用，true禁用
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'INPUT_TYPE', 'PLACEHOLDER', 'COMPONENT_WIDTH', 'COMPONENT_DEFAULT_VALUE', 'COMPONENT_SAVE_RESET', 'PROMPT_MESSAGE', 'INPUT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'LABEL_INFO',
      //label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'COMPONENT_RULE']
    }
  };

  var FormAlertBoxConfig = {
    version: 'v2.0',
    code: 'FORM_ALERT_BOX',
    type: 'alert',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormAlertBox',
      edit: 'FormAlertBox',
      read: 'FormAlertBox'
    },
    desc: {
      icon: 'icon-zu',
      type: 'alert'
    },
    // TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('警告提示'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-zu',
      // OPTIONS 属性
      type: 'success',
      description: '',
      showIcon: false,
      banner: false,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      closable: false,
      promptMessageContent: ''
    },
    default: {
      defaultValue: 0,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      // label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'ALERT_TYPE', 'ALERT_OPTIONS_ATTR', 'COMPONENT_RULE']
    },
    mobileEditor: {
      elementConfig: ['LABEL_INFO',
      // label 标签
      'COMPONENT_WIDTH', 'PROMPT_MESSAGE', 'ALERT_TYPE', 'ALERT_OPTIONS_ATTR', 'COMPONENT_RULE']
    }
  };

  var FormTextFieldConfig = {
    version: 'v2.0',
    code: 'FORM_TEXT_FIELD',
    type: 'textField',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormTextField',
      edit: 'FormTextField',
      read: 'FormTextField'
    },
    desc: {
      icon: 'icon-zihao'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('文字'),
      textAlign: 'left',
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      showRequiredMark: false,
      promptMessageContent: ''
    },
    initQueryUrl: '',
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['SYSTEM_DEFAULT_VALUE']
    },
    mobileEditor: {
      elementConfig: ['TableInfoEditor', 'SYSTEM_DEFAULT_VALUE']
    }
  };

  var FormTableConfig = {
    version: 'v2.0',
    code: 'FORM_TABLE',
    type: 'formTable',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'FormTable',
      edit: 'FormTable',
      read: 'FormTable'
    },
    desc: {
      icon: 'icon-tree'
    },
    //TODO: 后续可以把一些editor中操作的属性单独的抽离出来， 没必要放在这里
    displayConfig: {
      label: lang.lang('表格'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-tree',
      disabled: false,
      // 是否禁用
      defaultValue: undefined,
      // 默认值
      multiple: false,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      clearable: false,
      // 是否显示清除按钮
      showSearch: false,
      // 是否显示搜索框，搜索选择的项的值，而不是文字
      treeCheckable: false,
      placeholder: lang.lang('请选择'),
      dynamicKey: '',
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      promptMessageContent: '',
      afterSaveResetStatus: false
    },
    default: {
      defaultValue: undefined,
      // 默认值,
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: ['TableInfoEditor'],
      elementConfig: ['LABEL_INFO',
      //label 标签
      'PLACEHOLDER', 'COMPONENT_WIDTH']
    }
  };

  var MeasurementConfig = {
    version: 'v2.0',
    code: 'MEASUREMENT',
    type: 'MEASUREMENT',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'MeasurementComponent',
      edit: 'MeasurementComponent',
      read: 'MeasurementComponent'
    },
    displayConfig: {
      label: lang.lang('商品计量'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%',
      // 宽度
      placeholder: '请输入',
      // 没有输入时，提示文字
      clearable: false,
      disabled: false,
      // 是否禁用，false不禁用，true禁用
      labelCol: {
        span: 4
      },
      isCustomLabelCol: false,
      afterSaveResetStatus: false,
      hidden: false,
      // 是否隐藏，false显示，true隐藏
      maxLength: null,
      promptMessageContent: '',
      isCc: false // 是否抄送字段
    },
    default: {
      defaultValue: '',
      value: '',
      model: '' // 数据字段
    },
    rules: [
    // 验证规则
    {
      required: false,
      // 必须填写
      message: lang.lang('必填项')
    }],
    editor: {
      tableConfig: [
        // 'TableInfoEditor'
      ],
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var GoodsAttrManagementConfig = {
    version: 'v2.0',
    code: 'GOODS_ATTR',
    type: 'GOODS_ATTR',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'GoodsAttrManagement',
      edit: 'GoodsAttrManagement',
      read: 'GoodsAttrManagement'
    },
    displayConfig: {
      label: lang.lang('商品属性'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var PutInStorageOrderGoodsConfig = {
    version: 'v2.0',
    code: 'PUT_IN_STORAGE_ORDER_GOODS',
    type: 'PUT_IN_STORAGE_ORDER_GOODS',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'PutInStorageOrderGoods',
      edit: 'PutInStorageOrderGoods',
      read: 'PutInStorageOrderGoods'
    },
    displayConfig: {
      label: lang.lang('入库订单表格'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var PutInStorageBillGoodsConfig = {
    version: 'v2.0',
    code: 'PUT_IN_STORAGE_BILL_GOODS',
    type: 'PUT_IN_STORAGE_BILL_GOODS',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'PutInStorageBillGoods',
      edit: 'PutInStorageBillGoods',
      read: 'PutInStorageBillGoods'
    },
    displayConfig: {
      label: lang.lang('入库单表格'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var PrepareGoodsDetailConfig = {
    version: 'v2.0',
    code: 'PREPARE_GOODS_DETAIL',
    type: 'PREPARE_GOODS_DETAIL',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'PrepareGoodsDetail',
      edit: 'PrepareGoodsDetail',
      read: 'PrepareGoodsDetail'
    },
    displayConfig: {
      label: lang.lang('拣货'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var ExpectedOutboundOperationGoodsConfig = {
    version: 'v2.0',
    code: 'EXPECTED-OUTBOUND-OPERATION-GOODS',
    type: 'EXPECTED-OUTBOUND-OPERATION-GOODS',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'ExpectedOutboundOperationGoods',
      edit: 'ExpectedOutboundOperationGoods',
      read: 'ExpectedOutboundOperationGoods'
    },
    displayConfig: {
      label: lang.lang('预出库详情表格'),
      labelHTML: '',
      // 标题增强
      icon: 'icon-write',
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var ReceiveGoodsDetailsConfig = {
    version: 'v2.0',
    code: 'RECEIVE_GOODS_DETAILS',
    type: 'RECEIVE_GOODS_DETAILS',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'ReceiveGoodsDetails',
      edit: 'ReceiveGoodsDetails',
      read: 'ReceiveGoodsDetails'
    },
    displayConfig: {
      label: lang.lang('收获详情'),
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var PutAwayListConfig = {
    version: 'v2.0',
    code: 'PUT_AWAY_LIST',
    type: 'PUT_AWAY_LIST',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'PutAwayList',
      edit: 'PutAwayList',
      read: 'PutAwayList'
    },
    displayConfig: {
      label: lang.lang('上架明细'),
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var ReviewBillGoodsDetailConfig = {
    version: 'v2.0',
    code: 'REVIEW_BILL_GOOD_DETAIL',
    type: 'REVIEW_BILL_GOOD_DETAIL',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'ReviewBillGoodsDetail',
      edit: 'ReviewBillGoodsDetail',
      read: 'ReviewBillGoodsDetail'
    },
    displayConfig: {
      label: lang.lang('复核组件'),
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var TakeStockAddConfig = {
    version: 'v2.0',
    code: 'TAKE_STOCK_ADD',
    type: 'TAKE_STOCK_ADD',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'TakeStockAdd',
      edit: 'TakeStockAdd',
      read: 'TakeStockAdd'
    },
    displayConfig: {
      label: lang.lang('盘点任务创建表格'),
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  var StartTakeStockConfig = {
    version: 'v2.0',
    code: 'START_TAKE_STOCK',
    type: 'START_TAKE_STOCK',
    // 表单类型
    key: '',
    renderComponent: {
      ide: 'StartTakeStock',
      edit: 'StartTakeStock',
      read: 'StartTakeStock'
    },
    displayConfig: {
      label: lang.lang('开始盘点表单'),
      width: '100%'
    },
    editor: {
      elementConfig: ['LABEL_INFO' // label 标签
      ]
    },
    methods: {}
  };

  // 仓储业务用到的配置 END
  var componentsConfig = {
    FormInputConfig,
    FormTextareaConfig,
    FormNumberInputConfig,
    FormSelectInputConfig,
    FormCheckBoxConfig,
    FormRadioBoxConfig,
    FormDateSelectConfig,
    FormSwitchInputConfig,
    FormButtonConfig,
    FormStaticTextConfig,
    FormPhoneInputConfig,
    FormCascadeSelectConfig,
    FormTreeSelectConfig,
    FormAreaSelectConfig,
    FormDividerBoxConfig,
    FormCardConfig,
    FormGridConfig,
    FormMyFieldConfig,
    FormUserSelectConfig,
    FormOrgSelectConfig,
    FormDocumentNumberConfig,
    // FormLogisticTrackConfig,
    FormAlertBoxConfig,
    FormTextFieldConfig,
    FormTableConfig,
    // 仓储业务用到的配置 START
    MeasurementConfig,
    GoodsAttrManagementConfig,
    PutInStorageOrderGoodsConfig,
    PutInStorageBillGoodsConfig,
    ExpectedOutboundOperationGoodsConfig,
    ReceiveGoodsDetailsConfig,
    PutAwayListConfig,
    PrepareGoodsDetailConfig,
    ReviewBillGoodsDetailConfig,
    TakeStockAddConfig,
    StartTakeStockConfig
    // 仓储业务用到的配置 END
  };

  var FormComponentGroupConfig = [{
    groupType: 'basicsList',
    groupName: '基础控件',
    groupCompList: ['FORM_INPUT', 'FORM_TEXTAREA', 'FORM_NUMBER_INPUT', 'FORM_SELECT_INPUT', 'FORM_CHECK_BOX', 'FORM_RADIO_BOX', 'FORM_DATE_SELECT', 'FORM_SWITCH_INPUT', 'FORM_BUTTON', 'FORM_ALERT_BOX', 'FORM_STATIC_TEXT', 'FORM_PHONE_INPUT', 'FORM_CASCADE_SELECT', 'FORM_TREE_SELECT', 'FORM_AREA_SELECT']
  }, {
    groupType: 'layoutList',
    groupName: '布局控件',
    groupCompList: ['FORM_DIVIDER_BOX', 'FORM_CARD', 'FORM_GRID', 'FORM_MY_FIELD']
  }, {
    groupType: 'businessList',
    groupName: '业务组件',
    groupCompList: ['FORM_USER_SELECT', 'FORM_ORG_SELECT', 'FORM_DOCUMENT_NUMBER'
    // 'PUT_IN_STORAGE_BILL_GOODS',
    // 'PUT_AWAY_LIST',
    // 'FORM_TABLE',
    // 'REVIEW_BILL_GOOD_DETAIL'
    // 'FORM_LOGISTIC_TRACK'
    ]
  }];

  var FormLabelInputEditorConfig = {
    code: 'LABEL_INFO',
    editorConfigType: 'LABEL_INFO',
    componentName: 'FormLabelInputEditor',
    configField: 'label',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: ['label'] // 如果要配置多字段
  };

  var FormInputTypeEditorConfig = {
    code: 'INPUT_TYPE',
    editorConfigType: 'INPUT_TYPE',
    componentName: 'FormInputTypeEditor',
    configField: 'inputType' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormPlaceholderEditorConfig = {
    code: 'PLACEHOLDER',
    editorConfigType: 'PLACEHOLDER',
    componentName: 'FormPlaceholderEditor',
    configField: 'placeholder' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormComponentWidthEditorConfig = {
    code: 'COMPONENT_WIDTH',
    editorConfigType: 'COMPONENT_WIDTH',
    componentName: 'FormComponentWidthEditor',
    configField: 'width' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormCompDefaultValueEditorConfig = {
    code: 'COMPONENT_DEFAULT_VALUE',
    editorConfigType: 'COMPONENT_DEFAULT_VALUE',
    componentName: 'CompDefaultValueEditor',
    configField: 'defaultValue' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormCompAfterSaveResetConfig = {
    code: 'COMPONENT_SAVE_RESET',
    editorConfigType: 'COMPONENT_SAVE_RESET',
    componentName: 'AfterSaveReset',
    configField: 'afterSaveResetStatus' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormPromptMessageEditorConfig = {
    code: 'PROMPT_MESSAGE',
    editorConfigType: 'COMPONENT_SAVE_RESET',
    componentName: 'FormPromptMessageEditor',
    configField: 'promptMessageContent' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormInputOptionsAttrEditorConfig = {
    code: 'INPUT_OPTIONS_ATTR',
    editorConfigType: 'INPUT_OPTIONS_ATTR',
    componentName: 'FormInputOptionsAttrEditor',
    configField: 'disabled',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: ['disabled', 'clearable'
    // 'multiple',
    // 'range',
    // 'showInput',
    // 'showTime',
    // 'allowHalf',
    // 'showLabel'
    ] // 如果要配置多字段
  };

  var FormComponentRuleEditorConfig = {
    code: 'COMPONENT_RULE',
    editorConfigType: 'COMPONENT_RULE',
    componentName: 'FormComponentRuleEditor',
    configField: 'rules',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: [
      // 'displayConfig.disabled'
    ] // 如果要配置多字段
  };

  var FormCountStatisticsEditorConfig = {
    code: 'COUNT_STATISTICS',
    editorConfigType: 'COUNT_STATISTICS',
    componentName: 'CountStatistics',
    configField: 'countStatistics',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: [
      // 'displayConfig.disabled'
    ] // 如果要配置多字段
  };

  var FormDateDefaultValueEditorConfig = {
    code: 'DATE_DEFAULT_VALUE',
    editorConfigType: 'DATE_DEFAULT_VALUE',
    componentName: 'DateDefaultValueEditor',
    configField: 'defaultValue' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormAlertOptionsAttrEditorConfig = {
    code: 'ALERT_OPTIONS_ATTR',
    editorConfigType: 'ALERT_OPTIONS_ATTR',
    componentName: 'FormAlertOptionsAttrEditor',
    configField: 'showIcon',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: ['showIcon', 'banner', 'closable']
  };

  var FormAlertTypeEditorConfig = {
    code: 'ALERT_TYPE',
    editorConfigType: 'ALERT_OPTIONS_ATTR',
    componentName: 'FormAlertTypeEditor',
    configField: 'alertType',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: []
  };

  var FormButtonTypeEditorConfig = {
    code: 'BUTTON_TYPE',
    editorConfigType: 'BUTTON_TYPE',
    componentName: 'FormBtnTypeEditor',
    configField: 'type',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: []
  };

  var FormComponentHeightEditorConfig = {
    code: 'COMPONENT_HEIGHT',
    editorConfigType: 'COMPONENT_HEIGHT',
    componentName: 'FormComponentHeightEditor',
    configField: 'height',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: []
  };

  var FormCustomLabelConfig = {
    code: 'CUSTOM_LABEL',
    editorConfigType: 'CUSTOM_LABEL',
    componentName: 'FormCustomLabelEditor',
    configField: 'isCustomLabelCol',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: ['labelCol']
  };

  var FormDateFormatEditorConfig = {
    code: 'DATE_FORMAT',
    editorConfigType: 'DATE_FORMAT',
    componentName: 'FormDateFormatEditor',
    configField: 'format',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: []
  };

  var FormGridColumnEditorConfig = {
    code: 'GRID_COLUMN',
    editorConfigType: 'GRID_COLUMN',
    componentName: 'FormGridColumnEditor',
    configField: 'colNum' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormGridGutterEditorConfig = {
    code: 'GRID_GUTTER',
    editorConfigType: 'GRID_GUTTER',
    componentName: 'FormGridGutterEditor',
    configField: 'gutter' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormNumberMaxEditorConfig = {
    code: 'NUMBER_MAX',
    editorConfigType: 'NUMBER_MAX',
    componentName: 'FormNumberMaxEditor',
    configField: 'maxValue' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormNumberMinEditorConfig = {
    code: 'NUMBER_MIN',
    editorConfigType: 'NUMBER_MIN',
    componentName: 'FormNumberMinEditor',
    configField: 'minValue' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormNumberPrecisionEditorConfig = {
    code: 'NUMBER_PRECISION',
    editorConfigType: 'NUMBER_PRECISION',
    componentName: 'FormNumberPrecisionEditor',
    configField: 'precision' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormOrientationEditorConfig = {
    code: 'ORIENTATION',
    editorConfigType: 'ORIENTATION',
    componentName: 'FormOrientationEditor',
    configField: 'orientation' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormSelectDefaultValueEditorConfig = {
    code: 'SELECT_DEFAULT_VALUE',
    editorConfigType: 'SELECT_DEFAULT_VALUE',
    componentName: 'FormSelectDefaultValueEditor',
    configField: 'defaultValue' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormSelectOptionsConfigEditorConfig = {
    code: 'SELECT_OPTIONS_CONFIG',
    editorConfigType: 'SELECT_OPTIONS_CONFIG',
    componentName: 'FormSelectOptionConfigEditor',
    configField: 'dynamic' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormStepSizeEditorConfig = {
    code: 'STEP_SIZE',
    editorConfigType: 'STEP_SIZE',
    componentName: 'FormStepSizeEditor',
    configField: 'step' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormTextAlignEditorConfig = {
    code: 'TEXT_ALIGN',
    editorConfigType: 'TEXT_ALIGN',
    componentName: 'FormTextAlignEditor',
    configField: 'textAlign' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormTextOptionsAttrEditorConfig = {
    code: 'TEXT_OPTIONS_ATTR',
    editorConfigType: 'TEXT_OPTIONS_ATTR',
    componentName: 'FormTextOptionsAttrEditor',
    configField: 'showRequiredMark' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormTextareaHeightEditorConfig = {
    code: 'TEXTAREA_HEIGHT',
    editorConfigType: 'TEXTAREA_HEIGHT',
    componentName: 'FormTextareaHeightEditor',
    configField: 'minRows',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: ['minRows', 'maxRows'] // 如果要配置多字段
  };

  var FormTextPaddingLeftEditorConfig = {
    code: 'TEXT_PADDING_LEFT',
    editorConfigType: 'TEXT_PADDING_LEFT',
    componentName: 'TextPaddingLeftEditor',
    configField: 'paddingLeft' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormSystemDefaultValueEditor = {
    code: 'SYSTEM_DEFAULT_VALUE',
    editorConfigType: 'SYSTEM_DEFAULT_VALUE',
    componentName: 'SystemDefaultValueEditor',
    configField: 'defaultValue' // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
  };

  var FormComponentCustomEvent = {
    code: 'CUSTOM_EVENT',
    editorConfigType: 'CUSTOM_EVENT',
    componentName: 'FormCustomEventEditor',
    configField: 'customEvent',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: []
  };

  var SelectIsUserAttrEditorConfig = {
    code: 'IS_USER_ATTR',
    editorConfigType: 'IS_USER_ATTR',
    componentName: 'SelectIsUserAttrEditor',
    configField: 'isUserAttri',
    // editor 中要修改的值， 默认为ComponentConfig.displayConfig下的属性
    allowField: ['userAttriName', 'userAttriColumnId'] // 如果要配置多字段
  };

  var EditorsConfig = {
    FormLabelInputEditorConfig,
    FormInputTypeEditorConfig,
    FormPlaceholderEditorConfig,
    FormComponentWidthEditorConfig,
    FormCompDefaultValueEditorConfig,
    FormCompAfterSaveResetConfig,
    FormPromptMessageEditorConfig,
    FormInputOptionsAttrEditorConfig,
    FormComponentRuleEditorConfig,
    FormCountStatisticsEditorConfig,
    FormDateDefaultValueEditorConfig,
    FormAlertOptionsAttrEditorConfig,
    FormAlertTypeEditorConfig,
    FormButtonTypeEditorConfig,
    FormComponentHeightEditorConfig,
    FormCustomLabelConfig,
    FormDateFormatEditorConfig,
    FormGridColumnEditorConfig,
    FormGridGutterEditorConfig,
    FormNumberMaxEditorConfig,
    FormNumberMinEditorConfig,
    FormNumberPrecisionEditorConfig,
    FormOrientationEditorConfig,
    FormSelectDefaultValueEditorConfig,
    FormSelectOptionsConfigEditorConfig,
    FormStepSizeEditorConfig,
    FormTextAlignEditorConfig,
    FormTextOptionsAttrEditorConfig,
    FormTextareaHeightEditorConfig,
    FormTextPaddingLeftEditorConfig,
    FormSystemDefaultValueEditor,
    FormComponentCustomEvent,
    SelectIsUserAttrEditorConfig
  };

  FormSource.setup = () => {
    if (FormSource.isSetup) {
      return;
    }
    // 注册 editor 配置
    Object.keys(EditorsConfig).forEach(editorKey => {
      ylyFormController.FormComponentsControl.registerEditorConfig(EditorsConfig[editorKey]);
    });
    console.log(Object.keys(componentsConfig).map(item => componentsConfig[item].code));
    // 先初始化所有的组件的配置，
    Object.keys(componentsConfig).forEach(key => {
      ylyFormController.FormComponentsControl.registerComponentConfig(componentsConfig[key]);
    });
    ylyFormController.FormComponentsControl.registerGroupConfig('DEFAULT_FORM_GROUP', FormComponentGroupConfig);
    // 在初始化有哪些组件
    // 在根据组件组进行分类
    FormSource.isSetup = true;
  };
  FormSource.setup();

  exports.FormSource = FormSource;

  Object.defineProperty(exports, '__esModule', { value: true });

})));
